Chart for WPF/Silverlight
MVVM による系列の自動生成
グラフ機能 > 系列の生成 > MVVM による系列の自動生成

このトピックは、新しい Visual Studio プロジェクトが作成されており、プロジェクトに適切な参照が追加されていることを前提とします。

手順1:マークアップを作成します

次の XAML マークアップから始めます。

XAML
コードのコピー
<c1:C1Chart Name="c1Chart1">
    <c1:C1Chart.Data>
        <c1:ChartData SeriesItemsSource="{Binding SeriesDataCollection}">
         <c1:ChartData.SeriesItemTemplate>
                <DataTemplate>
                    <c1:DataSeries Label="{Binding Year}" ValuesSource="{Binding Values}" />
              </DataTemplate>
    </c1:ChartData.SeriesItemTemplate>
        </c1:ChartData>
    </c1:C1Chart.Data>
    <c1:C1ChartLegend DockPanel.Dock="Right" />
</c1:C1Chart>

ChartData オブジェクトで SeriesItemsSource と SeriesItemTemplate が設定され、それぞれ値が連結されています。

手順2:ビューモデルを作成します

次に、プロジェクトのビューモデルを作成する必要があります。

次のコードをコードファイルに追加してビューモデルを作成します。

C#
コードのコピー
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Collections.ObjectModel;
namespace ChartAutomaticSeries
{
    public static class ViewModelData
    {
        public static int NUM_SERIES = 5;
        public static int NUM_POINTS = 8;
        public static Random Rnd = new Random();
        private static ChartModelData _data;
        public static ChartModelData ChartData
        {
            get
            {
                if (_data == null)
                {
                    _data = new ChartModelData();
                }
                return _data;
            }
        }
    }
    public class ChartModelData
    {
        public ObservableCollection<SeriesData> SeriesDataCollection
        {
            get
            {
                if (_seriesDataCollection == null)
                {
                    _seriesDataCollection = new ObservableCollection<SeriesData>();
                    for (int i = 0; i < ViewModelData.NUM_SERIES; i++)
                        _seriesDataCollection.Add(new SeriesData(2010 + i));
                }
                return _seriesDataCollection;
            }
        }
        private ObservableCollection<SeriesData> _seriesDataCollection;
    }
    public class SeriesData : INotifyPropertyChanged
    {
        int _year;
        double[] _values;
        public SeriesData(int year)
        {
            _year = year;
            _values = new double[ViewModelData.NUM_POINTS];
            for (int i = 0; i < ViewModelData.NUM_POINTS; i++)
                _values[i] = ViewModelData.Rnd.Next(0, 100);
        }
        public int Year
        {
            get { return _year; }
            set
            {
                if (_year != value)
                {
                    _year = value;
                    OnPropertyChanged("Year");
                }
            }
        }
        public double[] Values
        {
            get { return _values; }
            set
            {
                if (_values != value)
                {
                    _values = value;
                    OnPropertyChanged("Values");
                }
            }
        }
        #region INotifyPropertyChanged Members
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion
    }
}

手順3:コードを追加します

MainWindow.xaml ファイルに切り替えます。ページを右クリックし、コンテキストメニューから[コードの表示]を選択します。既存のコードを次のように編集します。

C#
コードのコピー
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new ChartModelData();
        }
    }
}
関連トピック